0x60a06040523060805234801561001457600080fd5b5060805161210b61004c600039600081816108a5015281816108e501528181610bbe01528181610bfe0152610c8d015261210b6000f3fe6080604052600436106101e35760003560e01c806370c095e211610102578063b7a912b311610095578063ef8a923511610064578063ef8a923514610595578063f4b05606146105bd578063f72c0d8b146105dd578063f7c618c1146105ff57600080fd5b8063b7a912b314610520578063ce6e403e14610540578063d547741f14610560578063d6f192621461058057600080fd5b806391d14854116100d157806391d14854146104a957806395d89b41146104c9578063a217fddf146104f4578063b2cca39d1461050957600080fd5b806370c095e2146103ee578063752987341461042e5780638129fc1c1461045057806390c4ce521461046557600080fd5b806335cbdd6d1161017a578063446a2ec811610149578063446a2ec81461039c5780634e71d92d146103b15780634f1ef286146103c657806352d1902d146103d957600080fd5b806335cbdd6d1461032757806336568abe1461033c5780633659cfe61461035c5780633cf7e2a21461037c57600080fd5b806306fdde03116101b657806306fdde0314610285578063248a9ca3146102c25780632f2ff15d146102f25780633490d7491461031257600080fd5b806301ffc9a7146101e8578063026c42071461021d578063057d882414610241578063066b57ef14610263575b600080fd5b3480156101f457600080fd5b50610208610203366004611a92565b61061f565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023360fd5481565b604051908152602001610214565b34801561024d57600080fd5b5061026161025c366004611abc565b610656565b005b34801561026f57600080fd5b5061023360008051602061204f83398151915281565b34801561029157600080fd5b5060408051808201909152600b81526a56697269756d5374616b6560a81b60208201525b6040516102149190611b5d565b3480156102ce57600080fd5b506102336102dd366004611b90565b600090815260c9602052604090206001015490565b3480156102fe57600080fd5b5061026161030d366004611bc5565b610783565b34801561031e57600080fd5b506102336107a9565b34801561033357600080fd5b506102616107fd565b34801561034857600080fd5b50610261610357366004611bc5565b61081d565b34801561036857600080fd5b50610261610377366004611bf1565b61089b565b34801561038857600080fd5b50610261610397366004611c0c565b61097a565b3480156103a857600080fd5b50610233610a4c565b3480156103bd57600080fd5b50610261610a97565b6102616103d4366004611c85565b610bb4565b3480156103e557600080fd5b50610233610c80565b3480156103fa57600080fd5b50610416731540602fa43d9b4237aa67c640dc8bb8c4693dcd81565b6040516001600160a01b039091168152602001610214565b34801561043a57600080fd5b5033600090815260fe6020526040902054610233565b34801561045c57600080fd5b50610261610d33565b34801561047157600080fd5b50610485610480366004611b90565b610ebf565b6040805182516001600160a01b031681526020928301519281019290925201610214565b3480156104b557600080fd5b506102086104c4366004611bc5565b610f20565b3480156104d557600080fd5b50604080518082019091526002815261565360f01b60208201526102b5565b34801561050057600080fd5b50610233600081565b34801561051557600080fd5b506102336101005481565b34801561052c57600080fd5b5061026161053b366004611abc565b610f4b565b34801561054c57600080fd5b5061026161055b366004611d47565b61106e565b34801561056c57600080fd5b5061026161057b366004611bc5565b6110af565b34801561058c57600080fd5b506102336110d5565b3480156105a157600080fd5b50610104546105b09060ff1681565b6040516102149190611d7e565b3480156105c957600080fd5b506102616105d8366004611bf1565b611127565b3480156105e957600080fd5b5061023360008051602061206f83398151915281565b34801561060b57600080fd5b5060fb54610416906001600160a01b031681565b60006001600160e01b03198216637965db0b60e01b148061065057506301ffc9a760e01b6001600160e01b03198316145b92915050565b61065e610a4c565b61010155426101035561066f6110d5565b33600090815260fc6020908152604080832093909355610101546101029091529190205560016101045460ff1660018111156106ad576106ad611d68565b146106fb5760405162461bcd60e51b81526020600482015260196024820152782b34b934bab6a9ba30b5b29d1029ba30ba3ab99032b93937b960391b60448201526064015b60405180910390fd5b60005b8181101561077e576000610105828154811061071c5761071c611da6565b9060005260206000209060020201905061076b84848481811061074157610741611da6565b90506020028101906107539190611dbc565b835460018501546001600160a01b0390911690611163565b508061077681611e23565b9150506106fe565b505050565b600082815260c9602052604090206001015461079f8133611216565b61077e838361127a565b600060fd546000036107bb5750600090565b60fd546107d46107ce4262015180611e3c565b42611300565b33600090815260fe60205260409020546107ee9190611e54565b6107f89190611e73565b905090565b60008051602061204f8339815191526108168133611216565b504260ff55565b6001600160a01b038116331461088d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106f2565b610897828261136f565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036108e35760405162461bcd60e51b81526004016106f290611e95565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661092c60008051602061208f833981519152546001600160a01b031690565b6001600160a01b0316146109525760405162461bcd60e51b81526004016106f290611ee1565b61095b816113d6565b60408051600080825260208201909252610977918391906113ef565b50565b60008051602061204f8339815191526109938133611216565b6109a06101056000611a4c565b60005b82811015610a4657368484838181106109be576109be611da6565b905060400201905061010560405180604001604052808360000160208101906109e79190611bf1565b6001600160a01b03908116825260209485013591850191909152825460018082018555600094855293859020835160029092020180546001600160a01b0319169190921617815592015191015580610a3e81611e23565b9150506109a3565b50505050565b600060fd54600003610a5e5750600090565b61010354600003610a6f5750600090565b60fd54610a7f4261010354611300565b610a899190611e73565b610101546107f89190611e3c565b610a9f610a4c565b610101554261010355610ab06110d5565b33600090815260fc6020818152604080842094855561010154610102835293209290925590525480610b3a5760405162461bcd60e51b815260206004820152602d60248201527f56697269756d5374616b653a20526577617264206d757374206265206772656160448201526c746572207468616e207a65726f60981b60648201526084016106f2565b33600081815260fc60205260408082209190915560fb5490516340c10f1960e01b81526004810192909252602482018390526001600160a01b0316906340c10f1990604401600060405180830381600087803b158015610b9957600080fd5b505af1158015610bad573d6000803e3d6000fd5b5050505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610bfc5760405162461bcd60e51b81526004016106f290611e95565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c4560008051602061208f833981519152546001600160a01b031690565b6001600160a01b031614610c6b5760405162461bcd60e51b81526004016106f290611ee1565b610c74826113d6565b610897828260016113ef565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d205760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106f2565b5060008051602061208f83398151915290565b600054610100900460ff16610d4e5760005460ff1615610d52565b303b155b610db55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106f2565b600054610100900460ff16158015610dd7576000805461ffff19166101011790555b610ddf61155a565b610de761155a565b610df260003361127a565b610e0a60008051602061206f8339815191523361127a565b610e2260008051602061204f8339815191523361127a565b610e416000731540602fa43d9b4237aa67c640dc8bb8c4693dcd61127a565b610e6d60008051602061206f833981519152731540602fa43d9b4237aa67c640dc8bb8c4693dcd61127a565b610e9960008051602061204f833981519152731540602fa43d9b4237aa67c640dc8bb8c4693dcd61127a565b4260ff55610104805460ff191660011790558015610977576000805461ff001916905550565b60408051808201909152600080825260208201526101058281548110610ee757610ee7611da6565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101549181019190915292915050565b600091825260c9602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610f53610a4c565b610101554261010355610f646110d5565b33600090815260fc6020908152604080832093909355610101546101029091529190205560016101045460ff166001811115610fa257610fa2611d68565b14610feb5760405162461bcd60e51b81526020600482015260196024820152782b34b934bab6a9ba30b5b29d1029ba30ba3ab99032b93937b960391b60448201526064016106f2565b60005b8181101561077e576000610105828154811061100c5761100c611da6565b9060005260206000209060020201905061105b84848481811061103157611031611da6565b90506020028101906110439190611dbc565b835460018501546001600160a01b03909116906115c7565b508061106681611e23565b915050610fee565b60008051602061204f8339815191526110878133611216565b610104805483919060ff1916600183818111156110a6576110a6611d68565b02179055505050565b600082815260c960205260409020600101546110cb8133611216565b61077e838361136f565b33600090815260fc60209081526040808320546101029092528220546110f9610a4c565b6111039190611f2d565b33600090815260fe602052604090205461111d9190611e54565b6107f89190611e3c565b60008051602061204f8339815191526111408133611216565b5060fb80546001600160a01b0319166001600160a01b0392909216919091179055565b600061116f8285611e54565b90508060fd60008282546111839190611f2d565b909155505033600090815260fe6020526040812080548392906111a7908490611f2d565b9091555050604051630cbfecfb60e31b81526001600160a01b038416906365ff67d8906111dd9088908890600090600401611f44565b600060405180830381600087803b1580156111f757600080fd5b505af115801561120b573d6000803e3d6000fd5b505050505050505050565b6112208282610f20565b61089757611238816001600160a01b03166014611641565b611243836020611641565b604051602001611254929190611f8d565b60408051601f198184030181529082905262461bcd60e51b82526106f291600401611b5d565b6112848282610f20565b61089757600082815260c9602090815260408083206001600160a01b03851684529091529020805460ff191660011790556112bc3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008060ff54846113119190611f2d565b905060006113246301e133806032611e54565b61132e9083611e73565b111561133e576000915050610650565b61135460ff548461134f9190611f2d565b6117e4565b61135d826117e4565b6113679190611f2d565b949350505050565b6113798282610f20565b1561089757600082815260c9602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008051602061206f8339815191526108978133611216565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156114225761077e8361181e565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561147c575060408051601f3d908101601f1916820190925261147991810190612002565b60015b6114df5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106f2565b60008051602061208f833981519152811461154e5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106f2565b5061077e8383836118ba565b600054610100900460ff166115c55760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016106f2565b565b60006115d38285611e54565b90508060fd60008282546115e79190611e3c565b909155505033600090815260fe60205260408120805483929061160b908490611e3c565b9091555050604051630cbfecfb60e31b81526001600160a01b038416906365ff67d8906111dd9088908890600190600401611f44565b60606000611650836002611e54565b61165b906002611e3c565b67ffffffffffffffff81111561167357611673611c6f565b6040519080825280601f01601f19166020018201604052801561169d576020820181803683370190505b509050600360fc1b816000815181106116b8576116b8611da6565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106116e7576116e7611da6565b60200101906001600160f81b031916908160001a905350600061170b846002611e54565b611716906001611e3c565b90505b600181111561178e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061174a5761174a611da6565b1a60f81b82828151811061176057611760611da6565b60200101906001600160f81b031916908160001a90535060049490941c936117878161201b565b9050611719565b5083156117dd5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106f2565b9392505050565b60006117f48263065a4492611e3c565b611802836316457c14611e54565b61181490670de0b6b3a7640000611e54565b6106509190611e73565b6001600160a01b0381163b61188b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106f2565b60008051602061208f83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6118c3836118df565b6000825111806118d05750805b1561077e57610a46838361191f565b6118e88161181e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6119875760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016106f2565b600080846001600160a01b0316846040516119a29190612032565b600060405180830381855af49150503d80600081146119dd576040519150601f19603f3d011682016040523d82523d6000602084013e6119e2565b606091505b5091509150611a0a82826040518060600160405280602781526020016120af60279139611a13565b95945050505050565b60608315611a225750816117dd565b825115611a325782518084602001fd5b8160405162461bcd60e51b81526004016106f29190611b5d565b508054600082556002029060005260206000209081019061097791905b80821115611a8e5780546001600160a01b031916815560006001820155600201611a69565b5090565b600060208284031215611aa457600080fd5b81356001600160e01b0319811681146117dd57600080fd5b60008060208385031215611acf57600080fd5b823567ffffffffffffffff80821115611ae757600080fd5b818501915085601f830112611afb57600080fd5b813581811115611b0a57600080fd5b8660208260051b8501011115611b1f57600080fd5b60209290920196919550909350505050565b60005b83811015611b4c578181015183820152602001611b34565b83811115610a465750506000910152565b6020815260008251806020840152611b7c816040850160208701611b31565b601f01601f19169190910160400192915050565b600060208284031215611ba257600080fd5b5035919050565b80356001600160a01b0381168114611bc057600080fd5b919050565b60008060408385031215611bd857600080fd5b82359150611be860208401611ba9565b90509250929050565b600060208284031215611c0357600080fd5b6117dd82611ba9565b60008060208385031215611c1f57600080fd5b823567ffffffffffffffff80821115611c3757600080fd5b818501915085601f830112611c4b57600080fd5b813581811115611c5a57600080fd5b8660208260061b8501011115611b1f57600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611c9857600080fd5b611ca183611ba9565b9150602083013567ffffffffffffffff80821115611cbe57600080fd5b818501915085601f830112611cd257600080fd5b813581811115611ce457611ce4611c6f565b604051601f8201601f19908116603f01168101908382118183101715611d0c57611d0c611c6f565b81604052828152886020848701011115611d2557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600060208284031215611d5957600080fd5b8135600281106117dd57600080fd5b634e487b7160e01b600052602160045260246000fd5b6020810160028310611da057634e487b7160e01b600052602160045260246000fd5b91905290565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611dd357600080fd5b83018035915067ffffffffffffffff821115611dee57600080fd5b6020019150600581901b3603821315611e0657600080fd5b9250929050565b634e487b7160e01b600052601160045260246000fd5b600060018201611e3557611e35611e0d565b5060010190565b60008219821115611e4f57611e4f611e0d565b500190565b6000816000190483118215151615611e6e57611e6e611e0d565b500290565b600082611e9057634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b600082821015611f3f57611f3f611e0d565b500390565b6040808252810183905260006001600160fb1b03841115611f6457600080fd5b8360051b8086606085013760009083016060019081529215156020909201919091525092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611fc5816017850160208801611b31565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ff6816028840160208801611b31565b01602801949350505050565b60006020828403121561201457600080fd5b5051919050565b60008161202a5761202a611e0d565b506000190190565b60008251612044818460208701611b31565b919091019291505056fe27878d6fd2352e8c530d873016f67bb748d79859c781b7c2453cc2caffa896ff189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ea4a9fdcc9efe684e74efe3b78de2f736c5fd59b7a156865f156f524833d765964736f6c634300080e0033