0x608060405234801561001057600080fd5b50600080546001600160a01b0319163217905561519b806100326000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063359ecc851461032a5780636a18f762146103575780638f836b8b1461036a575b60006060600436101561005357600080fd5b6000359150600436036040519150808252601f19601f602083010116820160405280600460208401375061ffff60e01b601083901c166102385760608061111160e01b6001600160e01b0319851614156101b65760006100b58460008361037d565b60015460405163670cf85560e01b8152919850949650919450506001600160a01b039092169163670cf85591506100f29085908790600401614d67565b600060405180830381600087803b15801561010c57600080fd5b505af192505050801561011d575060015b6101a0575060016101308460008361037d565b60015460405163670cf85560e01b8152919850949650919450506001600160a01b039092169163670cf855915061016d9085908790600401614d67565b600060405180830381600087803b15801561018757600080fd5b505af115801561019b573d6000803e3d6000fd5b505050505b600081156101ac575060015b8060005260206000f35b6101c28360008061037d565b60015460405163670cf85560e01b81529197509495506001600160a01b039094169363670cf85593506101fd92508591508690600401614d67565b600060405180830381600087803b15801561021757600080fd5b505af115801561022b573d6000803e3d6000fd5b5050505050505050610328565b6001600160e01b0319821663061e01a160e21b148061026757506001600160e01b031982166334f870a160e21b145b156102ca576000808280602001905181019061028391906147a3565b5091509150818160405160200161029b929190614bdd565b60408051601f198184030181529082905262461bcd60e51b82526102c191600401614dfe565b60405180910390fd5b6102d381610513565b1561032557600080828060200190518101906102ef91906147a3565b50915091506000821215610311578160000360405160200161029b9190614bd4565b8060000360405160200161029b9190614bd4565b50505b005b61033d610338366004614687565b61037d565b60405161034e959493929190614d8c565b60405180910390f35b610328610365366004614496565b610539565b610328610378366004614382565b6105c2565b6060600080600060606000610391896106c6565b88151560e0820152905086156103a957600160a08201525b60606000808360c00151156103e15783516001810192506103cb908d90610786565b8451601560ff9290921691820201600101855290505b8361012001511561049d57600060040160009054906101000a90046001600160a01b03166001600160a01b0316638d0016098d86600001516040518363ffffffff1660e01b8152600401610436929190614ddc565b60006040518083038186803b15801561044e57600080fd5b505afa158015610462573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261048a919081019061452f565b8051855161015090910201600101855294505b6104a78c85610848565b92506104b58c858786610928565b9750871580156104c657508360c001515b156104d7576104d78382848f610ac7565b6104e083610b62565b9850826000815181106104ef57fe5b602002602001015160c0015195508360a00151965050505050939792965093509350565b600060808251111580610531575061052c826060610bd5565b608014155b90505b919050565b6000546001600160a01b031633146105635760405162461bcd60e51b81526004016102c190614e80565b60005b81518110156105be5760016000600601600084848151811061058457fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610566565b5050565b6000546001600160a01b031633146105ec5760405162461bcd60e51b81526004016102c190614e80565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b038a8116919091179092556002805482168984161790556003805482168884161790556004805482168784161790556005805490911691851691909117905560005b818110156106bc5760016006600085858581811061067757fe5b905060200201602081019061068c9190614311565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905560010161065d565b5050505050505050565b6106ce61413c565b6106dc828260000151610c91565b80835260408301919091526106f2908390610c91565b808352602083019190915260009061070b908490610786565b825160010183529050600061071f82610d49565b60ff909116608086015290151560608501529050801561077f578251610746908590610786565b915061075182610d92565b151561014088015215156101208701521515610100860152151560a0850152151560c0840152825160010183525b5050919050565b6000818260010110156107e0576040805162461bcd60e51b815260206004820152601060248201527f746f55696e74385f6f766572666c6f7700000000000000000000000000000000604482015290519081900360640190fd5b8160010183511015610839576040805162461bcd60e51b815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e647300000000000000000000000000604482015290519081900360640190fd5b50818101600101515b92915050565b6101008101516060906019901561085d5750601d5b60008084610140015115610886578451610878908790610786565b91505060ff60016029830201165b60008361ffff168261ffff1687600001510161ffff16885103816108a657fe5b0490508060ff1667ffffffffffffffff811180156108c357600080fd5b506040519080825280602002602001820160405280156108fd57816020015b6108ea614198565b8152602001906001900390816108e25790505b5094508561014001511561091e578551600101865261091e87878588610db6565b5050505092915050565b6000610935858584610e60565b905080156109645761095a8260008151811061094d57fe5b602002602001015161113e565b5060019050610abf565b610979846000015186848761010001516114af565b6109878285608001516116c0565b60006109988560a0015184866116fc565b9050600081116109de578460e001516109c35760405162461bcd60e51b81526004016102c190614e2d565b6109d38360008151811061094d57fe5b506001915050610abf565b6109e783611816565b6000805b8451811015610ab757604960ff16858281518110610a0557fe5b60200260200101516000015160ff161415610aaf57858260ff1681518110610a2957fe5b602002602001015160800151858281518110610a4157fe5b602002602001015160c001906001600160a01b031690816001600160a01b031681525050858260ff1681518110610a7457fe5b602002602001015160600151858281518110610a8c57fe5b60209081029190910101516001600160a01b0390911660e0909101526001909101905b6001016109eb565b506000925050505b949350505050565b60005b838160ff161015610b5b576000610ae18385611871565b90506000610af28460148701610786565b905060005b6008811015610b49576001811b821660ff1615610b415782888281518110610b1b57fe5b602002602001015161012001906001600160a01b031690816001600160a01b0316815250505b600101610af7565b50505060159290920191600101610aca565b5050505050565b60408051602081019091526000808252606091905b83518160ff161015610bce5781610ba3858360ff1681518110610b9657fe5b6020026020010151611934565b604051602001610bb4929190614ba5565b60408051601f198184030181529190529150600101610b77565b5092915050565b600081826020011015610c2f576040805162461bcd60e51b815260206004820152601260248201527f746f55696e743235365f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160200183511015610c88576040805162461bcd60e51b815260206004820152601560248201527f746f55696e743235365f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b50016020015190565b60008080805b6025811015610d3c57855185820110610cf7576040805162461bcd60e51b815260206004820152601560248201527f766172696e743235365f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b60008682870181518110610d0757fe5b60209101015160f81c607f81166007840281901b949094179390915060808216610d32575050610d3c565b5050600101610c97565b9095930160010193505050565b6080811615156000604083161515815b60048160ff161015610d8a5760008160ff166001901b8660ff16161115610d8257809250610d8a565b600101610d59565b509193909250565b60808116151591604082161515916020811615159160108216151591600816151590565b60005b8260ff168160ff161015610b5b578351600090610dd7908790610786565b8551909150610dea908790600101611871565b838260ff1681518110610df957fe5b60209081029190910101516001600160a01b0390911660c0909101528451610e25908790601501611871565b838260ff1681518110610e3457fe5b60209081029190910101516001600160a01b0390911660e0909101525083516029018452600101610db9565b6000826020015182600081518110610e7457fe5b6020026020010151610160018181525050610e9983600001518584866080015161199b565b610ea98284608001516001611a24565b610ed082846080015160ff1681518110610ebf57fe5b602002602001015160000151611ed6565b15610f5457826060015115610f1957826040015182846080015160ff1681518110610ef757fe5b60200260200101516101400151604001516001600160a01b0316109050610f4f565b826040015182846080015160ff1681518110610f3157fe5b60200260200101516101400151604001516001600160a01b03161190505b6110f5565b610f7b82846080015160ff1681518110610f6a57fe5b602002602001015160000151611ef3565b15611001576000610fd783856080015160ff1681518110610f9857fe5b6020026020010151610140015160200151600160601b85876080015160ff1681518110610fc157fe5b6020026020010151610140015160000151611eff565b9050836060015115610ff157836040015181109150610ffb565b8360400151811191505b506110f5565b61102882846080015160ff168151811061101757fe5b602002602001015160000151611faa565b156110f557600454608084015183516001600160a01b039092169163e15f7e8391859160ff90911690811061105957fe5b60200260200101516000015184866080015160ff168151811061107857fe5b602002602001015161010001516040518363ffffffff1660e01b81526004016110a2929190614ef0565b60206040518083038186803b1580156110ba57600080fd5b505afa1580156110ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f2919061466b565b90505b8015611133578260e0015161111c5760405162461bcd60e51b81526004016102c190614e11565b825161112b908584600061199b565b506001611137565b5060005b9392505050565b805160009060ff16604614806111585750815160ff16601f145b806111695750815161116990611fc4565b806111785750815160ff16604b145b1561122d57600480548351610100850151608086015160a087015160405163f4dae9e360e01b81526001600160a01b039095169563f4dae9e3956111c0959493929101614f9f565b604080518083038186803b1580156111d757600080fd5b505afa1580156111eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120f9190614349565b6001600160a01b0390811660e08501521660c0830152506001610534565b815160ff166036141561148257608082015160ff16611362578161010001516001600160a01b03166316dc165b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561128457600080fd5b505afa158015611298573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bc919061432d565b8260c001906001600160a01b031690816001600160a01b0316815250508161010001516001600160a01b031663b7d19fc46040518163ffffffff1660e01b815260040160206040518083038186803b15801561131757600080fd5b505afa15801561132b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134f919061432d565b6001600160a01b031660e083015261147a565b8161010001516001600160a01b031663b7d19fc46040518163ffffffff1660e01b815260040160206040518083038186803b1580156113a057600080fd5b505afa1580156113b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d8919061432d565b8260c001906001600160a01b031690816001600160a01b0316815250508161010001516001600160a01b03166316dc165b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561143357600080fd5b505afa158015611447573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146b919061432d565b6001600160a01b031660e08301525b506001610534565b815161148d90611faa565b1561149a57506001610534565b815160ff166052141561053457506001919050565b61ffff841660005b83518160ff161015611582576114d68563ffffffff8085169061078616565b848260ff16815181106114e557fe5b602090810291909101015160ff909116905261150d8563ffffffff60018501811690611ff916565b848260ff168151811061151c57fe5b60209081029190910181015161ffff9092169101526115478563ffffffff6003850181169061187116565b848260ff168151811061155657fe5b60209081029190910101516001600160a01b0390911661010090910152601791909101906001016114b7565b5060005b83518160ff1610156116185760018201916115ac90869063ffffffff9081169061078616565b848260ff16815181106115bb57fe5b602090810291909101015160ff90911660809091015260018201916115eb90869063ffffffff9081169061078616565b848260ff16815181106115fa57fe5b602090810291909101015160ff90911660a090910152600101611586565b508161162457506116ba565b60005b83518160ff1610156116b7576116468563ffffffff80851690611ff916565b848260ff168151811061165557fe5b602090810291909101015161ffff9091166040909101526116828563ffffffff60028501811690611ff916565b848260ff168151811061169157fe5b602090810291909101015161ffff90911660609091015260049190910190600101611627565b50505b50505050565b60005b82518160ff1610156116f757600360ff82811690841614156116e3575060025b6116ee848383611a24565b506001016116c3565b505050565b600080805b845181101561180d57600085828151811061171857fe5b602002602001015161016001519050600086838151811061173557fe5b60200260200101516060015161ffff1611156117845760016117808288858151811061175d57fe5b60200260200101516060015161ffff16620186a00362ffffff16620186a0611eff565b0390505b60006117a58288858151811061179657fe5b602002602001015188876120b5565b9050604960ff168784815181106117b857fe5b60200260200101516000015160ff1614156117d4576001909301925b806117f7576117f782898986815181106117ea57fe5b6020026020010151612368565b61180187846125e8565b94505050600101611701565b50509392505050565b60005b81518110156105be57604960ff1682828151811061183357fe5b60200260200101516000015160ff16141561184d57611869565b61186982828151811061185c57fe5b6020026020010151612750565b600101611819565b6000818260140110156118cb576040805162461bcd60e51b815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015611924576040805162461bcd60e51b815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b500160200151600160601b900490565b606081600001518260c001518360e0015184610100015185610160015186610180015187608001518860a001518961012001518a606001516040516020016119859a99989796959493929190614beb565b6040516020818303038152906040529050919050565b61ffff60ff60178302168501166119b28482610786565b838360ff16815181106119c157fe5b602090810291909101015160ff90911690526119e98463ffffffff6003840181169061187116565b838360ff16815181106119f857fe5b602002602001015161010001906001600160a01b031690816001600160a01b0316815250505050505050565b600260ff16838360ff1681518110611a3857fe5b60200260200101516000015160ff161415611aae57611aa9838360ff1681518110611a5f57fe5b60200260200101516101000151848460ff1681518110611a7b57fe5b602002602001015160800151858560ff1681518110611a9657fe5b602002602001015161014001518461276b565b6116f7565b611ac0838360ff1681518110610f6a57fe5b15611b2157611aa9838360ff1681518110611ad757fe5b60200260200101516101000151848460ff1681518110611af357fe5b602002602001015160800151858560ff1681518110611b0e57fe5b602002602001015161014001518461280b565b603260ff16838360ff1681518110611b3557fe5b60200260200101516000015160ff161415611ba857611aa9838360ff1681518110611b5c57fe5b60200260200101516101000151848460ff1681518110611b7857fe5b602002602001015160800151858560ff1681518110611b9357fe5b602002602001015161014001516000856128c2565b603560ff16838360ff1681518110611bbc57fe5b60200260200101516000015160ff161415611c2f57611aa9838360ff1681518110611be357fe5b60200260200101516101000151848460ff1681518110611bff57fe5b602002602001015160800151858560ff1681518110611c1a57fe5b602002602001015161014001516001856128c2565b603660ff16838360ff1681518110611c4357fe5b60200260200101516000015160ff161415611cb457611aa9838360ff1681518110611c6a57fe5b60200260200101516101000151848460ff1681518110611c8657fe5b602002602001015160800151858560ff1681518110611ca157fe5b6020026020010151610140015184612a05565b603360ff16838360ff1681518110611cc857fe5b60200260200101516000015160ff161415611d3957611aa9838360ff1681518110611cef57fe5b60200260200101516101000151848460ff1681518110611d0b57fe5b602002602001015160800151858560ff1681518110611d2657fe5b6020026020010151610140015184612b39565b611d4b838360ff168151811061101757fe5b156116f75760045483516001600160a01b0390911690636d5ec47490859060ff8616908110611d7657fe5b602002602001015160000151858560ff1681518110611d9157fe5b602002602001015160800151868660ff1681518110611dac57fe5b602002602001015160a00151878760ff1681518110611dc757fe5b602002602001015161010001516040518563ffffffff1660e01b8152600401611df39493929190615003565b60806040518083038186803b158015611e0b57600080fd5b505afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e43919061444f565b868660ff1681518110611e5257fe5b602002602001015160c001878760ff1681518110611e6c57fe5b602002602001015160e001888860ff1681518110611e8657fe5b60200260200101516101400151600001898960ff1681518110611ea557fe5b60209081029190910181015161014001510193909352929091526001600160a01b0392831690915291169052505050565b600060328260ff1610158015610531575050604660ff9091161090565b603260ff821610919050565b6000808060001985870986860292508281109083900303905080611f355760008411611f2a57600080fd5b508290049050611137565b808411611f4157600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000611fb582612d37565b80610531575061053182612d50565b600060ff8216604c1480611fdb575060ff821660fa145b80611fe9575060ff8216604d145b8061053157505060ff1660511490565b600081826002011015612053576040805162461bcd60e51b815260206004820152601160248201527f746f55696e7431365f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b81600201835110156120ac576040805162461bcd60e51b815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016002015190565b60045483516000916001600160a01b03169060ff16604614806120dc5750845160ff16601f145b806120ed575084516120ed90611fc4565b806120fe575084516120fe90612d6a565b8061210d5750845160ff16604a145b8061211c5750845160ff166050145b8061212b5750845160ff16604b145b156121d3578451610100860151608087015160a088015160405163518f047d60e11b81526001600160a01b0386169463a31e08fa9461217294919390928d90600401614fcd565b602060405180830381600087803b15801561218c57600080fd5b505af11580156121a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c491906149ec565b6101808601526001915061235f565b845160ff16604914156122a357806001600160a01b03166326b873208660000151876101000151878760ff168151811061220957fe5b602002602001015189608001518a60a001518c6040518763ffffffff1660e01b815260040161223d96959493929190614f52565b6040805180830381600087803b15801561225657600080fd5b505af115801561226a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228e9190614780565b6101808701526101608601526001915061235f565b84516122ae90611faa565b1561235f57845160c086015160e087015160408089015160608a015160208b0151925163a128978960e01b81526001600160a01b0388169663a1289789966123029691959094919391928f90600401614f0c565b602060405180830381600087803b15801561231c57600080fd5b505af1158015612330573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235491906149ec565b610180860152600191505b50949350505050565b805161237390611ed6565b15612458578060a0015160ff16816080015160ff16141561239b5761018081018390526116f7565b81806123b75750610140810151606001516001600160801b0316155b1561241257805160ff16603614156123ed576123e28382610100015183610140015160a00151612d85565b61018082015261240d565b6124068382610100015183610140015160a00151612f0a565b6101808201525b611aa9565b61244d83826020015161ffff1683610140015160400151846101400151606001518561014001516080015186610140015160a0015115612ff4565b6101808201526116f7565b805161246390611ef3565b156124b5576101408101518051602082015160a09092015190919015612493575050610140810151602081015190515b6124a7858383866020015161ffff166130d1565b610180840152506116f79050565b805160ff16605214156116f757608081015160ff16156000816124dc578260e001516124e2565b8260c001515b90506000826124f5578360c001516124fb565b8360e001515b6101008501519091506001600160a01b031660008073c2c301759b5e0c385a38e678014868a33e2f3ae3634a6c44bf8686868a808f888261253d576000612546565b6001600160801b035b6040518963ffffffff1660e01b8152600401612569989796959493929190614c9a565b60606040518083038186803b15801561258157600080fd5b505afa158015612595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b99190614724565b5091509150856125cf5781600003600f0b6125d7565b80600003600f0b5b610180880152505050505050505050565b6000600183510382141561267a578260008151811061260357fe5b602002602001015161016001518360018551038151811061262057fe5b60200260200101516101800151101561263b57506000610842565b8260008151811061264857fe5b602002602001015161016001518360018551038151811061266557fe5b60200260200101516101800151039050610842565b600083838151811061268857fe5b60200260200101516040015161ffff1611156127115760016126eb8484815181106126af57fe5b602002602001015161018001518585815181106126c857fe5b60200260200101516040015161ffff16620186a00362ffffff16620186a0611eff565b038383600101815181106126fb57fe5b6020026020010151610160018181525050610842565b82828151811061271d57fe5b6020026020010151610180015183836001018151811061273957fe5b602002602001015161016001818152505092915050565b600061275b8261113e565b9050806105be576105be82613171565b8360018216156127ef57806001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156127ae57600080fd5b505afa1580156127c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e69190614a04565b50602085015283525b6002821615610b5b57600160ff85161460a08401525050505050565b8360018216156127ef57600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561285157600080fd5b505afa158015612865573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288991906147f1565b506dffffffffffffffffffffffffffff918216875216602086015250506002821615610b5b57600160ff85161460a08401525050505050565b8460018216156128e5576128d686846134d1565b6001600160a01b031660408501525b60028216156116b757806001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b15801561292757600080fd5b505afa15801561293b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295f919061482a565b6001600160801b03166060850152600160ff86161460a0850152604080516334324e9f60e21b815290516001600160a01b0383169163d0c93a7c916004808301926020929190829003018186803b1580156129b957600080fd5b505afa1580156129cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f19190614766565b600290810b900b6080850152505050505050565b6000849050806001600160a01b031663c19d93fb6040518163ffffffff1660e01b81526004016101006040518083038186803b158015612a4457600080fd5b505afa158015612a58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a7c9190614844565b506001600160801b031660608a01525050506001600160a01b03909216604086015250506002821615610b5b57806001600160a01b03166358c51ce66040518163ffffffff1660e01b815260040160206040518083038186803b158015612ae257600080fd5b505afa158015612af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1a9190614766565b600290810b900b6080840152600160ff85161460a08401525050505050565b836001821615612c185760408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166339db007960e21b17905290516000916060916001600160a01b03891691612b9c91614b89565b6000604051808303816000865af19150503d8060008114612bd9576040519150601f19603f3d011682016040523d82523d6000602084013e612bde565b606091505b509092509050600082612c035760405162461bcd60e51b81526004016102c190614e49565b50602001516001600160a01b03166040850152505b6002821615610b5b57806001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b158015612c5a57600080fd5b505afa158015612c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c92919061482a565b6001600160801b03166060840152600160ff85161460a0840152604080516334324e9f60e21b815290516001600160a01b0383169163d0c93a7c916004808301926020929190829003018186803b158015612cec57600080fd5b505afa158015612d00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d249190614766565b600290810b900b60808401525050505050565b600060ff8216604e148061053157505060ff16604f1490565b6000612d5b826135d8565b806105315750610531826135f7565b6000612d758261362c565b8061053157505060ff1660021490565b600081612e545760405163857f812f60e01b81526001600160a01b0384169063857f812f90612dc09030908890620c34ff1990600401614d2b565b6040805180830381600087803b158015612dd957600080fd5b505af1925050508015612e09575060408051601f3d908101601f19168201909252612e0691810190614780565b60015b612e4d57612e156150c5565b80612e205750612e43565b60008082806020019051810190612e379190614780565b94506111379350505050565b3d6000803e3d6000fd5b5050611137565b604051631624092960e11b81526001600160a01b03841690632c48125290612e879030908890620c350090600401614d2b565b6040805180830381600087803b158015612ea057600080fd5b505af1925050508015612ed0575060408051601f3d908101601f19168201909252612ecd91810190614780565b60015b61180d57612edc6150c5565b80612ee75750612e43565b60008082806020019051810190612efe9190614780565b50935061113792505050565b60008382156001600160a01b03851663128acb0830838581612f405773fffd8963efd1fc6a506488495d951d5263988d25612f47565b6401000276a45b6040518563ffffffff1660e01b8152600401612f669493929190614cf1565b6040805180830381600087803b158015612f7f57600080fd5b505af1925050508015612faf575060408051601f3d908101601f19168201909252612fac91810190614780565b60015b612fe957612fbb6150c5565b80612fc65750612fe4565b80806020019051810190612fda91906149ec565b9350505050611137565b61180d565b505050509392505050565b60008061300a8888620f424003620f4240611eff565b9050600061301a87878487613645565b905083156130365761302f818888600061369f565b9250613046565b613043878288600061370a565b92505b6000613051886137c7565b9050600061305e836137c7565b90508060020b8260020b131561307057905b60008760020b83830360020b8161308357fe5b0460010190506000612710878161309657fe5b0490508082018711156130bc576130af87838301613af3565b96505050505050506130c7565b600196505050505050505b9695505050505050565b60008085116130f25760405162461bcd60e51b81526004016102c190614eb7565b6000841180156131025750600083115b61311e5760405162461bcd60e51b81526004016102c190614ed4565b600061313086620f4240859003613b30565b9050600061313e8286613b30565b905060006131598361315389620f4240613b30565b90613b82565b905080828161316457fe5b0498975050505050505050565b61010081015160a0820151608083015160ff908116911614156132a157806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156131c757600080fd5b505afa1580156131db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ff919061432d565b8260c001906001600160a01b031690816001600160a01b031681525050806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561325557600080fd5b505afa158015613269573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328d919061432d565b6001600160a01b031660e0830152506134ce565b608082015160ff166133bf57806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156132e657600080fd5b505afa1580156132fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061331e919061432d565b8260c001906001600160a01b031690816001600160a01b031681525050806001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561337457600080fd5b505afa158015613388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ac919061432d565b6001600160a01b031660e08301526105be565b806001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156133f857600080fd5b505afa15801561340c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613430919061432d565b8260c001906001600160a01b031690816001600160a01b031681525050806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561348657600080fd5b505afa15801561349a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134be919061432d565b6001600160a01b031660e0830152505b50565b6000811561355957826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561351257600080fd5b505afa158015613526573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061354a91906148de565b50949550610842945050505050565b826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561359257600080fd5b505afa1580156135a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ca9190614969565b509498975050505050505050565b6000605560ff831610801590610531575050605c60ff91909116111590565b600060ff82166053148061360e575060ff82166054145b8061361c575060ff8216605d145b8061053157505060ff16605e1490565b600060ff82166047148061053157505060ff16604a1490565b600080856001600160a01b03161161365c57600080fd5b6000846001600160801b03161161367257600080fd5b81613689576136848585856001613bc0565b613696565b6136968585856001613ca1565b95945050505050565b6000836001600160a01b0316856001600160a01b031611156136bf579293925b816136e757613684836001600160801b03168686036001600160a01b0316600160601b611eff565b613696836001600160801b03168686036001600160a01b0316600160601b613d92565b6000836001600160a01b0316856001600160a01b0316111561372a579293925b7bffffffffffffffffffffffffffffffff000000000000000000000000606084901b166001600160a01b03868603811690871661376657600080fd5b8361379657866001600160a01b03166137898383896001600160a01b0316611eff565b8161379057fe5b046137bc565b6137bc6137ad8383896001600160a01b0316613d92565b886001600160a01b0316613dcc565b979650505050505050565b60006401000276a36001600160a01b03831610801590613803575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b613838576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106138d957607f810383901c91506138e3565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14613ae457886001600160a01b0316613ac882613dd7565b6001600160a01b03161115613add5781613adf565b805b613ae6565b815b9998505050505050505050565b80820382811115610842576040805162461bcd60e51b8152602060048201526002602482015261737560f01b604482015290519081900360640190fd5b6000811580613b4b57505080820282828281613b4857fe5b04145b610842576040805162461bcd60e51b8152602060048201526003602482015262646d6f60e81b604482015290519081900360640190fd5b80820182811015610842576040805162461bcd60e51b815260206004820152600360248201526264616f60e81b604482015290519081900360640190fd5b60008115613c335760006001600160a01b03841115613bf657613bf184600160601b876001600160801b0316611eff565b613c0e565b6001600160801b038516606085901b81613c0c57fe5b045b9050613c2b613c266001600160a01b03881683614116565b614126565b915050610abf565b60006001600160a01b03841115613c6157613c5c84600160601b876001600160801b0316613d92565b613c78565b613c78606085901b6001600160801b038716613dcc565b905080866001600160a01b031611613c8f57600080fd5b6001600160a01b038616039050610abf565b600082613caf575083610abf565b7bffffffffffffffffffffffffffffffff000000000000000000000000606085901b168215613d4f576001600160a01b03861684810290858281613cef57fe5b041415613d2057818101828110613d1e57613d1483896001600160a01b031683613d92565b9350505050610abf565b505b613d4682613d41878a6001600160a01b03168681613d3a57fe5b0490614116565b613dcc565b92505050610abf565b6001600160a01b03861684810290858281613d6657fe5b04148015613d7357508082115b613d7c57600080fd5b808203613d14613c26846001600160a01b038b16845b6000613d9f848484611eff565b905060008280613dab57fe5b8486091115611137576000198110613dc257600080fd5b6001019392505050565b808204910615150190565b60008060008360020b12613dee578260020b613df6565b8260020b6000035b9050620d89e8811115613e34576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216613e5557700100000000000000000000000000000000613e67565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615613e9b576ffff97272373d413259a46990580e213a0260801c5b6004821615613eba576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613ed9576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613ef8576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613f17576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613f36576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613f55576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613f75576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613f95576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613fb5576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613fd5576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615613ff5576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615614015576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615614035576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615614055576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615614076576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615614096576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156140b5576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156140d2576b048a170391f7dc42444e8fa20260801c5b60008460020b13156140ed5780600019816140e957fe5b0490505b640100000000810615614101576001614104565b60005b60ff16602082901c0192505050919050565b8082018281101561084257600080fd5b806001600160a01b038116811461053457600080fd5b6040805161016081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081019190915290565b604080516101a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081019190915261014081016141f661420a565b815260200160008152602001600081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b80516105348161516b565b600082601f83011261425a578081fd5b815161426d61426882615071565b61502f565b818152846020838601011115614281578283fd5b610abf826020830160208701615093565b8051600f81900b811461053457600080fd5b8051600281900b811461053457600080fd5b80516dffffffffffffffffffffffffffff8116811461053457600080fd5b80516001600160801b038116811461053457600080fd5b805161ffff8116811461053457600080fd5b805163ffffffff8116811461053457600080fd5b600060208284031215614322578081fd5b81356111378161516b565b60006020828403121561433e578081fd5b81516111378161516b565b6000806040838503121561435b578081fd5b82516143668161516b565b60208401519092506143778161516b565b809150509250929050565b600080600080600080600060c0888a03121561439c578283fd5b87356143a78161516b565b965060208801356143b78161516b565b955060408801356143c78161516b565b945060608801356143d78161516b565b935060808801356143e78161516b565b925060a088013567ffffffffffffffff80821115614403578384fd5b818a0191508a601f830112614416578384fd5b813581811115614424578485fd5b8b60208083028501011115614437578485fd5b60208301945080935050505092959891949750929550565b60008060008060808587031215614464578182fd5b845161446f8161516b565b60208601519094506144808161516b565b6040860151606090960151949790965092505050565b600060208083850312156144a8578182fd5b823567ffffffffffffffff8111156144be578283fd5b8301601f810185136144ce578283fd5b80356144dc61426882615053565b81815283810190838501858402850186018910156144f8578687fd5b8694505b8385101561452357803561450f8161516b565b8352600194909401939185019185016144fc565b50979650505050505050565b60006020808385031215614541578182fd5b825167ffffffffffffffff811115614557578283fd5b8301601f81018513614567578283fd5b805161457561426882615053565b81815283810190838501610180808502860187018a1015614594578788fd5b8795505b8486101561465d5780828b0312156145ae578788fd5b6145b78161502f565b825181526145c688840161423f565b8882015260406145d781850161423f565b9082015260606145e884820161423f565b9082015260806145f984820161423f565b9082015260a0838101519082015260c0808401519082015260e0808401519082015261010080840151908201526101208084015190820152610140808401519082015261016080840151908201528452600195909501949286019290810190614598565b509098975050505050505050565b60006020828403121561467c578081fd5b815161113781615180565b60008060006060848603121561469b578081fd5b833567ffffffffffffffff8111156146b1578182fd5b8401601f810186136146c1578182fd5b80356146cf61426882615071565b8181528760208385010111156146e3578384fd5b816020840160208301378360208383010152809550505050602084013561470981615180565b9150604084013561471981615180565b809150509250925092565b600080600060608486031215614738578081fd5b61474184614292565b925061474f60208501614292565b915061475d604085016142d4565b90509250925092565b600060208284031215614777578081fd5b611137826142a4565b60008060408385031215614792578182fd5b505080516020909101519092909150565b6000806000606084860312156147b7578081fd5b8351925060208401519150604084015167ffffffffffffffff8111156147db578182fd5b6147e78682870161424a565b9150509250925092565b600080600060608486031215614805578081fd5b61480e846142b6565b925061481c602085016142b6565b915061475d604085016142fd565b60006020828403121561483b578081fd5b611137826142d4565b600080600080600080600080610100898b031215614860578182fd5b885161486b8161516b565b975061487960208a016142a4565b965061488760408a016142eb565b955061489560608a016142eb565b94506148a360808a016142eb565b935060a08901516148b381615180565b92506148c160c08a016142d4565b91506148cf60e08a016142d4565b90509295985092959890939650565b600080600080600080600060e0888a0312156148f8578081fd5b87516149038161516b565b9650614911602089016142a4565b955061491f604089016142eb565b945061492d606089016142eb565b935061493b608089016142eb565b925061494960a089016142fd565b915060c088015161495981615180565b8091505092959891949750929550565b600080600080600080600060e0888a031215614983578081fd5b875161498e8161516b565b965061499c602089016142a4565b95506149aa604089016142eb565b94506149b8606089016142eb565b93506149c6608089016142eb565b925060a088015160ff811681146149db578182fd5b60c089015190925061495981615180565b6000602082840312156149fd578081fd5b5051919050565b600080600060608486031215614a18578081fd5b8351925060208401519150604084015190509250925092565b6001600160a01b03169052565b60601b6bffffffffffffffffffffffff19169052565b6000815180845260208085019450808401835b83811015614a8e57614a7a878351614ac5565b610180969096019590820190600101614a67565b509495945050505050565b60008151808452614ab1816020860160208601615093565b601f01601f19169290920160200192915050565b805182526020810151614adb6020840182614a31565b506040810151614aee6040840182614a31565b506060810151614b016060840182614a31565b506080810151614b146080840182614a31565b5060a0818101519083015260c0808201519083015260e0808201519083015261010080820151908301526101208082015190830152610140808201519083015261016090810151910152565b60f81b7fff00000000000000000000000000000000000000000000000000000000000000169052565b60008251614b9b818460208701615093565b9190910192915050565b60008351614bb7818460208801615093565b835190830190614bcb818360208801615093565b01949350505050565b90815260200190565b918252602082015260400190565b600060ff60f81b8c60f81b1682526bffffffffffffffffffffffff19808c60601b166001840152808b60601b166015840152808a60601b1660298401525087603d83015286605d830152614c42607d830187614b60565b614c4f607e830186614b60565b614c5c607f830185614a3e565b5060f09190911b7fffff0000000000000000000000000000000000000000000000000000000000001660938201526095019998505050505050505050565b6001600160a01b03988916815296909716602087015260408601949094529115156060850152151560808401526001600160801b0390811660a084015261ffff90911660c083015290911660e08201526101000190565b6001600160a01b03948516815292151560208401526040830191909152909116606082015260a06080820181905260009082015260c00190565b6001600160a01b039390931683526001600160801b0391909116602083015260020b604082015260806060820181905260009082015260a00190565b600060408252614d7a6040830185614a99565b82810360208401526136968185614a54565b600060a08252614d9f60a0830188614a99565b861515602084015285151560408401526001600160a01b03851660608401528281036080840152614dd08185614a54565b98975050505050505050565b600060408252614def6040830185614a99565b90508260208301529392505050565b6000602082526111376020830184614a99565b602080825260029082015261413160f01b604082015260600190565b602080825260029082015261209960f11b604082015260600190565b60208082526010908201527f445050207175657279206661696c656400000000000000000000000000000000604082015260600190565b6020808252600d908201527f6163636573732064656e69656400000000000000000000000000000000000000604082015260600190565b60208082526003908201526249494160e81b604082015260600190565b602080825260029082015261125360f21b604082015260600190565b60ff9290921682526001600160a01b0316602082015260400190565b60ff9790971687526001600160a01b03958616602088015293909416604086015261ffff91821660608601528116608085015290911660a083015260c082015260e00190565b60ff871681526001600160a01b03861660208201526102208101614f796040830187614ac5565b60ff85166101c083015260ff84166101e083015282610200830152979650505050505050565b60ff94851681526001600160a01b039390931660208401529083166040830152909116606082015260800190565b60ff95861681526001600160a01b0394909416602085015291841660408401529092166060820152608081019190915260a00190565b60ff94851681529284166020840152921660408201526001600160a01b03909116606082015260800190565b60405181810167ffffffffffffffff8111828210171561504b57fe5b604052919050565b600067ffffffffffffffff82111561506757fe5b5060209081020190565b600067ffffffffffffffff82111561508557fe5b50601f01601f191660200190565b60005b838110156150ae578181015183820152602001615096565b838111156116ba5750506000910152565b60e01c90565b600060443d10156150d557615168565b600481823e6308c379a06150e982516150bf565b146150f357615168565b6040513d600319016004823e80513d67ffffffffffffffff81602484011181841117156151235750505050615168565b8284019250825191508082111561513d5750505050615168565b503d8301602082840101111561515557505050615168565b601f01601f191681016020016040529150505b90565b6001600160a01b03811681146134ce57600080fd5b80151581146134ce57600080fdfea164736f6c6343000706000a